package chapter_2;

import java.util.Arrays;

/**
 * (InsertionSort) 插入排序.
 *
 * 流程
 * 1. 记录
 * 2. 移动
 * 3. 插入
 *
 * @author 汪文波(Wang Wenbo) wenboit@163.com
 * @notes Create on 2021-12-02 07:27
 */
public class InsertionSort {

    public static void main(String[] args) {
        int[] arr = {5, 2, 4, 6, 1, 3};
        InsertionSort.desc(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void asc(int[] arr) {
        // 未排序索引范围：[1..arr.length)
        for (int j = 1; j < arr.length; j++) {
            int key = arr[j];
            // 已排序索引范围：[0..j)
            int i = j - 1;
            while (i >= 0 && arr[i] > key) {
                arr[i + 1] = arr[i];
                i -= 1;
            }
            // 插入
            arr[i + 1] = key;
        }
    }

    public static void desc(int[] arr) {
        // 未排序索引范围：[1..arr.length)
        for (int j = 1; j < arr.length; j++) {
            int key = arr[j];
            // 已排序索引范围：[0..j)
            int i = j - 1;
            while (i >= 0 && arr[i] < key) {
                arr[i + 1] = arr[i];
                i -= 1;
            }
            // 插入
            arr[i + 1] = key;
        }
    }

}
